/**************************************************************************************
*
*	Copyright (C) 2009 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	PhysicsEvents.h
*
*	Description -	Collection of Physics related events. 
*
*	Comments	-	Collision and trigger events
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	08/24/2013	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_PHYSICS_EVENTS_H_
#define _PSX_PHYSICS_EVENTS_H_

#include "Pulse.h"
#include "IEvent.h"
#include "PhysicsSystem.h"

namespace Pulse
{
	class EventCollisionBase : public IEvent
	{
	public:

		EventCollisionBase( const CollisionData &collisionData  ) 
			: IEvent(), m_collisionData( collisionData ) { }

		virtual const EEvent::Type GetEventType( void ) const = 0;
		//virtual const EEvent::Type GetEventType( void ) const { return EEvent::COLLISION_ENTER; }

		const CollisionData * GetCollisionData( void ) const { return &m_collisionData; }

	protected:

		const CollisionData m_collisionData;

	};

	class EventCollisionEnter : public EventCollisionBase
	{
	public:

		EventCollisionEnter( const CollisionData &collisionData  ) 
			: EventCollisionBase( collisionData ) { }

		virtual const EEvent::Type GetEventType( void ) const { return EEvent::COLLISION_ENTER; }

	protected:

	};

	class EventCollisionStay : public EventCollisionBase
	{
	public:

		EventCollisionStay( const CollisionData &collisionData  ) 
			: EventCollisionBase( collisionData ) { }

		virtual const EEvent::Type GetEventType( void ) const { return EEvent::COLLISION_STAY; }

	protected:

	};

	class EventCollisionExit : public EventCollisionBase
	{
	public:

		EventCollisionExit( const CollisionData &collisionData  ) 
			: EventCollisionBase( collisionData ) { }

		virtual const EEvent::Type GetEventType( void ) const { return EEvent::COLLISION_EXIT; }

	protected:

	};
}

#endif /* _PSX_PHYSICS_EVENTS_H_ */